package 寒假刷题;

public class 编码验证UTF {
    public boolean validUtf8(int[] data) {
        int n = data.length;
        for (int i = 0; i < n;) {
            int t = data[i],j=7;
            while (j>=0 && (((t>>j)&1)==1))
                j--;
            //cnt为编码字节数
            int cnt = 7-j;
            if (cnt==1 || cnt>4)
                return false;
            //剩余字符不能构成满足要求的字节编码
            if (i+cnt-1>=n)
                return false;
            for (int k = i+1; k < i+cnt; k++) {
                //前两位为1
                if (((data[k]>>7)&1)==1 && (((data[k]>>6)&1)==0))
                    continue;
                return false;
            }
            if (cnt==0)
                i++;
            else
                i+=cnt;
        }
        return true;
    }
}
